package stars;

import java.util.ArrayList;
import java.util.HashMap;

import com.jme3.math.Vector2f;

import controller.IController;

import stars.enums.EStarMods;
import utilities.Key;
import view.AbstractView;
import view.IView;

import model.IModel;
import model.IPhysicalDataModelContainer;
import model.IPhysicalDataModel;
import model.AbstractModel;
import model.PhysicalDataModel;

public class StarModel extends AbstractModel { //IPhysicalDataModel, IModel {
	//stellar characteristics
	//private double lifetime; //yrs
	private String type;
	//private ArrayList<EStarMods> starStability = new ArrayList<EStarMods>();
	//private ArrayList<Integer> color = new ArrayList<Integer>();
	private String colorName;	
	
	private PhysicalDataModel physicalData;	
	
	public StarModel() {
		
		//Initialize any data packages
		this.physicalData = new PhysicalDataModel(variables);		
	}
	
	//Define getter methods so controller can access these data packages
	public PhysicalDataModel getPhysicalDataModel() {
		return this.physicalData;
	}
	//Continue...	
	
	public void setColorName(String colorName) {
		this.colorName = colorName;
	}
	
	public String getColorName() {
		return this.colorName;
	}
	
	//QQQ:  How much of the below needed?  Revise.
	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;		
	}
	
	public void setLifetime(double lifetime) {
		variables.put("lifetime", lifetime);		
	}

	public Double getLifetime() {
		return variables.get("lifetime");
	}

	
	
	//Interface-defined methods
//	public void attach(AbstractView view) {
//		model.attach(view);
//	}
//
//	public void detach(AbstractView view) {
//		model.detach(view);		
//	}
//
//	public void updateViews() {
//		model.updateViews();
//	}
//
//	public void setController(IController controller) {
//		model.setController(controller);		
//	}
//	
//	public IController getController() {
//		return model.getController();
//	}
//	
//	public Key getKey() {
//		return model.getKey();
//	}
//
//	public void setKey(Key key) {
//		model.setKey(key);
//	}
//
//	public int getKeyValue() {
//		return model.getKeyValue();
//	}
	
	
	
//	public void setContainer(IPhysicalDataModelContainer container) {
//		physicalData.setContainer(container);
//	}
//
//	public void removeContainer(IPhysicalDataModelContainer container) {
//		physicalData.removeContainer(container);		
//	}
//
//	public double getMass() {
//		return physicalData.getMass();
//	}
//
//	public void changeMass(double deltaMass) {
//		physicalData.changeMass(deltaMass);		
//	}
//
//	public void setMass(double mass) {
//		physicalData.setMass(mass);		
//	}
//
//	public double getVolume() {
//		return physicalData.getVolume();
//	}
//
//	public double getDensity() {
//		return physicalData.getDensity();
//	}
//
//	public double getFullEnergy() {
//		return physicalData.getFullEnergy();
//	}
//
//	public double getMassEnergy() {
//		return physicalData.getMassEnergy();
//	}
//
//	public double getSpinEnergy() {
//		return physicalData.getSpinEnergy();
//	}
//
//	public double getRadiationEnergy() {
//		return physicalData.getRadiationEnergy();
//	}
//
//	public double getGravEnergy() {
//		return physicalData.getGravEnergy();
//	}
//
//	public double getMagneticEnergy() {
//		return physicalData.getMagneticEnergy();
//	}
//
//	public Vector2f getLocation() {
//		return physicalData.getLocation();
//	}
//
//	public ArrayList<Integer> getHexLocation() {
//		return physicalData.getHexLocation();
//	}
//
//	public Vector2f getVelocity() {
//		return physicalData.getVelocity();
//	}
//
//	public void setVelocity(Vector2f velocity) {
//		physicalData.setVelocity(velocity);
//	}
//
//	public double getAge() {
//		return physicalData.getAge();
//	}
//
//	public void setAge(double age) {
//		physicalData.setAge(age);
//	}
//
//	public double getGravity() {
//		return physicalData.getGravity();
//	}
//
//	public double getRotation() {
//		return physicalData.getRotation();
//	}
//
//	public void setRotation(double rotation) {
//		physicalData.setRotation(rotation);
//	}
//
//	public double getTemperature() {
//		return physicalData.getTemperature();
//	}
//
//	public void setTemperature(double temperature) {
//		physicalData.setTemperature(temperature);
//	}
//
//	public double getRadius() {
//		return physicalData.getRadius();
//	}
//
//	public void setRadius(double radius) {
//		physicalData.setRadius(radius);
//	}
//
//	public double getOrbitalRadius() {
//		return physicalData.getOrbitalRadius();
//	}
//
//	public void setOrbitalRadius(double orbitalRadius) {
//		physicalData.setOrbitalRadius(orbitalRadius);
//	}
//
//	public double getLuminosity() {
//		return physicalData.getLuminosity();
//	}
//
//	public void setLuminosity(double luminosity) {
//		physicalData.setLuminosity(luminosity);
//	}
//
//	public double getMagField() {
//		return physicalData.getMagField();
//	}
//
//	public void setMagField(double magField) {
//		physicalData.setMagField(magField);
//	}
//
//	public ArrayList<Key> getGameEventList() {
//		return physicalData.getGameEventList();
//	}
//
//	public void addGameEvent(Key gameEvent) {
//		physicalData.addGameEvent(gameEvent);
//	}
//
//	public void removeGameEvent(Key gameEvent) {
//		physicalData.removeGameEvent(gameEvent);
//	}
//
//	public ArrayList<Key> getCacheList() {
//		return physicalData.getCacheList();
//	}
//
//	public void addCache(Key cache) {
//		physicalData.addCache(cache);
//	}
//
//	public void removeCache(Key cache) {
//		physicalData.removeCache(cache);
//	}
//
//	public ArrayList<Key> getItemList() {
//		return physicalData.getItemList();
//	}
//
//	public void addItem(Key item) {
//		physicalData.addItem(item);
//	}
//
//	public void removeItem(Key item) {
//		physicalData.removeItem(item);
//	}
//
//	public ArrayList<Key> getPuzzleList() {
//		return physicalData.getPuzzleList();
//	}
//
//	public void addPuzzle(Key puzzle) {
//		physicalData.addPuzzle(puzzle);
//	}
//
//	public void removePuzzle(Key puzzle) {
//		physicalData.removePuzzle(puzzle);
//	}
//
//	public ArrayList<String> getNameList() {
//		return physicalData.getNameList();
//	}
//
//	public void addName(String name) {
//		physicalData.addName(name);
//	}
//
//	public void removeName(String name) {
//		physicalData.removeName(name);
//	}
//
//	public String getCurrentName() {
//		return physicalData.getCurrentName();
//	}	
}
